<template>
	<view @click="handleCloseTips">
		<!-- 作业中的工单 -->
		<view class="cardItem" v-if="type == 7 && workingList.length">
			<view class="header">
				<view class="header_left">
					<image :src="typeMap[type].icon" mode=""></image>
					<view class="">{{ typeMap[type].title }}</view>
				</view>
				<view class="line"></view>
			</view>
			<view class="main">
				<view class="main_tab main_item">
					<view v-for="(item, index) in workingList" :key="index" @click="skip(item, index)" :class="[
						'tabItem',
						index == workingList.length - 1 ? '' : 'borderRight',
					]">
						<view class="amount" :style="item.planType == 3 && item.planCounts ? 'color:red' : ''">
							{{ item.planCounts ? item.planCounts : "0" }}
						</view>
						<view class="words">
							{{ resFunc(item.planType) }}
							<uni-icons type="arrowright" size="16" color="#999"></uni-icons>
						</view>
					</view>
				</view>
			</view>
		</view>

		<!-- 救援统计 -->
		<view class="cardItem" v-else-if="type == 9">
			<view class="header" @click="toSecondary">
				<view class="header_left">
					<image :src="typeMap[type].icon" mode=""></image>
					<view class="">{{ typeMap[type].title }}</view>
				</view>
				<view><uni-icons type="arrowright" size="16" color="#999"></uni-icons></view>
				<view class="line"></view>
			</view>
			<view class="main">
				<view class="main_item noPadding">
					<view class="letfLine">
						<view class="title"> </view>
					</view>
					<view class="subMain">
						<view class="subMain_item" @click="toSecondary">
							<view class="count">{{ value.unConfirm }}</view>
							<view class="bottom">待确认
								<uni-icons type="arrowright" size="16" color="#999"></uni-icons>
							</view>
						</view>
						<view class="subMain_item" @click="toSecondary({ type: 'rescue' })">
							<view class="count">{{ value.dispatching }}</view>
							<view class="bottom">待调度
								<uni-icons type="arrowright" size="16" color="#999"></uni-icons>
							</view>
						</view>
						<view class="subMain_item" @click="toSecondary({ type: 'rescue', status: 'confirmed' })">
							<view class="count">{{ value.dispatched }}</view>
							<view class="bottom">待跟踪
								<uni-icons type="arrowright" size="16" color="#999"></uni-icons>
							</view>
						</view>
						<view class="subMain_item" @click="toSecondary({ type: 'rescue', status: 'all' })">
							<view class="count">{{ value.total }}</view>
							<view class="bottom">全部
								<uni-icons type="arrowright" size="16" color="#999"></uni-icons>
							</view>
						</view>
					</view>
				</view>
			</view>
		</view>
		<!-- 考勤打卡 -->
		<view class="cardItem" @click="toSecondary" v-else-if="type == 1">
			<view class="header">
				<view class="header_left">
					<image :src="typeMap[type].icon" mode=""></image>
					<view class="">{{ typeMap[type].title }}</view>
				</view>
				<view><uni-icons type="arrowright" size="16" color="#999"></uni-icons></view>
				<view class="line"></view>
			</view>
			<view class="main">
				<view class="main_item">
					<view class="letfLine">
						<view class="title">今日考勤</view>
					</view>
					<view class="subMain">
						<view class="siginBox">
							<view class="subMain_item" v-for="(value, key) in signStatus" :key="key">
								<view class="signStatus" :style="{ color: value == 0 ? '#999' : '#68CA00' }">
									<image :src="value == 0
											? '/static/images/index/wdk.png'
											: '/static/images/index/ydk.png'
										" mode=""></image>
									{{ value == 0 ? "未打卡" : "已打卡" }}
								</view>
								<view class="bottom">{{ objMap[key] }}</view>
							</view>
						</view>
					</view>
				</view>
				<view class="main_item noPadding">
					<view class="letfLine">
						<view class="title">本月考勤</view>
					</view>
					<view class="subMain">
						<view class="subMain_item" v-for="(value, key) in signValue" :key="key">
							<view class="count">{{ value }}</view>
							<view class="bottom">{{ objMap[key] }}</view>
						</view>
					</view>
				</view>
			</view>
		</view>
		<!-- 保养关注项-S -->
		<view class="cardItem" v-else-if="type == 8">
			<view class="header">
				<view class="header_left">
					<image :src="typeMap[type].icon" mode=""></image>
					<view class="title">保养关注项 </view>
				</view>
				<view></view>
				<view class="line"></view>
			</view>
			<view class="main">
				<view class="main_item">
					<view class="letfLine">
						<view class="title">逾期情况</view>
					</view>
					<view class="subMain">
						<view class="siginBox">
							<view class="subMain_item" @click="toRecords(1)">
								<view class="count color_FF7505">{{ value.beOverdue }}</view>
								<view class="bottom">明天即将逾期</view>
							</view>
							<view class="subMain_item" @click="toRecords(2)">
								<view class="count color_red">{{ value.inOverdue }}</view>
								<view class="bottom">已逾期</view>
							</view>
						</view>
					</view>
				</view>
				<view class="main_item noPadding">
					<view class="letfLine">
						<view class="title">未维保签字<text class="text_desc">(年审梯)</text></view>
					</view>
					<view class="subMain">
						<view class="subMain_item" @click="toRecords(3)">
							<view class="count">{{ value.self }}</view>
							<view class="bottom">本人未签</view>
						</view>
						<view class="subMain_item" @click="toRecords(4)">
							<view class="count">{{ value.others }}</view>
							<view class="bottom">他人未签</view>
						</view>
					</view>
				</view>
			</view>
		</view>
		<!-- 保养关注项-E -->
		<!-- 组长统计 -->
		<view class="cardItem" v-else-if="type == 5">
			<view class="header" @click="toSecondary">
				<view class="header_left">
					<image :src="typeMap[type].icon" mode=""></image>
					<view class="title">统计
						<!-- <text>{{'('+value.deptName+')'}}</text> -->
						<text>{{ value.deptName ? `(${value.deptName})` : "" }}</text>
					</view>
				</view>
				<view><uni-icons type="arrowright" size="16" color="#999"></uni-icons></view>
				<view class="line"></view>
			</view>
			<view class="main">
				<view class="main_item">
					<view class="letfLine">
						<view class="title projectTitle">所在公司维保电梯项目总数
							<view class="tips">
								<zb-tooltip placement="top" ref="tooltip" right="100" keyval="xxx" arrow-left="100">
									<image class="msg" src="@/static/images/msg.png"></image>
									<view class="tipsContent" slot="content">
										<view class="">你所在的公司做过的工单涉及的项目、电梯数量统计</view>
									</view>
								</zb-tooltip>
							</view>
						</view>
					</view>
					<view class="subMain">
						<view class="siginBox">
							<view class="subMain_item" @click="toSecondary">
								<view class="count">{{ value.building }}</view>
								<view class="bottom">项目总数</view>
							</view>
							<view class="subMain_item" @click="toSecondary">
								<view class="count">{{ value.elevator }}</view>
								<view class="bottom">电梯总数</view>
							</view>
						</view>
					</view>
				</view>
				<!-- <view class="main_item noPadding">
          <view class="letfLine">
            <view class="title">任务统计(近7天)</view>
          </view>
          <view class="subMain">
            <view class="subMain_item" @click="toSecondary">
              <view class="count">{{ value.allPlan }}</view>
              <view class="bottom">任务总数</view>
            </view>
            <view class="subMain_item" @click="toSecondary">
              <view class="count">{{ value.finishPlan }}</view>
              <view class="bottom">完成任务总数</view>
            </view>
          </view>
        </view> -->
			</view>
		</view>
		<!-- 维保员统计 -->
		<view class="cardItem" v-else-if="type == 6">
			<view class="header" @click="toSecondary">
				<view class="header_left">
					<image :src="typeMap[type].icon" mode=""></image>
					<view class="title">统计 </view>
				</view>
				<view><uni-icons type="arrowright" size="16" color="#999"></uni-icons></view>
				<view class="line"></view>
			</view>
			<view class="main">
				<view class="main_item">
					<view class="letfLine">
						<view class="title projectTitle">个人维保电梯项目总数
							<view class="tips">
								<zb-tooltip placement="top" ref="tooltip" right="100" arrow-left="100">
									<image class="msg" src="@/static/images/msg.png"></image>
									<view class="tipsContent" slot="content">
										<view class="">你所做过的工单涉及的项目、电梯数量统计</view>
									</view>
								</zb-tooltip>
							</view>
						</view>
					</view>
					<view class="subMain">
						<view class="siginBox">
							<view class="subMain_item" @click="toSecondary">
								<view class="count">{{ value.building }}</view>
								<view class="bottom">项目总数</view>
							</view>
							<view class="subMain_item" @click="toSecondary">
								<view class="count">{{ value.elevator }}</view>
								<view class="bottom">电梯总数</view>
							</view>
						</view>
					</view>
				</view>
				<view class="main_item noPadding">
					<view class="letfLine">
						<view class="title">任务统计(近7天)</view>
					</view>
					<view class="subMain">
						<view class="subMain_item" @click="toSecondary">
							<view class="count">{{ value.allPlan }}</view>
							<view class="bottom">任务总数</view>
						</view>
						<view class="subMain_item" @click="toSecondary">
							<view class="count">{{ value.finishPlan }}</view>
							<view class="bottom">完成任务总数</view>
						</view>
					</view>
				</view>
			</view>
		</view>
		<view class="cardItem" @click.stop="toSecondary" v-else>
			<view class="header">
				<view class="header_left">
					<image :src="typeMap[type].icon" mode=""></image>
					<view class="">{{ typeMap[type].title }}</view>
				</view>
				<view><uni-icons type="arrowright" size="16" color="#999"></uni-icons></view>
				<view class="line"></view>
			</view>
			<view class="main">
				<view class="main_item">
					<view class="title">{{ typeMap[type].subTitle }}</view>
					<view class="subMain">
						<view class="subMain_item" v-for="(value, key) in value" :key="key">
							<view class="count">{{ value }}</view>
							<view class="bottom">{{ objMap[key] }}</view>
						</view>
					</view>
				</view>
			</view>
		</view>
	</view>
</template>
<script>
import { formatTime } from '@/utils/utils.js';
import { getMembers, getRepairGroups } from '@/apis/building.js';
// 经纬度距离计算
import { delRepeat } from '@/utils/tools.js';
// import { hanleToken } from '@/utils/utils.js';
import { mapState } from 'vuex';
export default {
	props: {
		type: {
			type: String,
			default: '',
		},

		objMap: {
			type: Object,
		},
		value: {
			type: Object,
			default: () => {
				return {};
			},
		},
		workingList: {
			type: Array,
			default: () => {
				return [];
			},
		},
	},

	created() { },
	computed: {
		...mapState('user', ['userinfo']),
	},
	watch: {
		value(newVal) {
			// console.log(newVal,oldVal,3333);
			if (this.type == '1') {
				// console.log('这里是考勤');
				const { normal, beLate, leaveEarly, absence, ...params } = newVal;
				this.signValue = { normal, beLate, leaveEarly, absence };
				this.signStatus = params;
				console.log(this.signValue);
			}
		},
	},
	data() {
		return {
			workList: [
				{ id: 1, name: '保养' },
				{ id: 2, name: '维修' },
				{ id: 3, name: '救援' },
				{ id: 4, name: '配件' },
				{ id: 5, name: '事务' },
				{ id: 6, name: '质检' },
				{ id: 9, name: '整改' },
			],
			// 考勤统计
			signValue: {},
			signStatus: {},
			// userinfo:"",
			typeMap: {
				1: {
					title: '考勤打卡',
					subTitle: '本月考勤',
					icon: '/static/images/index/dk.png',
					url: '/pages/work/index',
				},
				2: {
					title: '我的任务',
					subTitle: '今日任务',
					icon: '/static/images/index/rw.png',
					url: '/pages/myTask/index',
					// isTabbar: true
				},
				3: {
					title: '我的申请',
					subTitle: '申请进度',
					icon: '/static/images/index/sq.png',
					url: '/pageModules/myApplication/myApplication',
				},
				4: {
					title: '我的审批',
					subTitle: '审批进度',
					icon: '/static/images/index/sp.png',
					url: '/subpages/approve/index',
				},
				5: {
					title: '统计',
					icon: '/static/images/index/tj.png',
					url: '/pages/work/index',
				},
				6: {
					title: '统计',
					icon: '/static/images/index/tj.png',
					url: '/pages/work/index',
				},
				7: {
					title: '作业中工单',
					icon: '/static/images/index/work.png',
				},
				8: {
					title: '保养关注项',
					icon: '/static/images/index/by.png',
				},

				9: {
					title: '救援管理',
					icon: 'https://erised-fresh.oss-cn-shenzhen.aliyuncs.com/592800/1753930887655_hbqcnnmo.png?x-oss-process=image/resize,w_200%2Ch_200',
					url: '/subpages/rescue/rescueList',
				},
			},
			groupList: [],
		};
	},
	methods: {
		handleCloseTips() {
			uni.$emit('tooltipsClose');
		},
		skip(item) {
			switch (item.planType) {
			case 1:
				if (item.planCounts) {
					// let objs = {
					// 	overdueName: item.planDetailVos[0].overdueName,
					// 	planCheckName: item.planDetailVos[0].planCheckName
					// }
					let overdueName = item.planDetailVos[0].overdueName;
					let planCheckName = item.planDetailVos[0].planCheckName;
					uni.navigateTo({
						url: `/subpages/workOrders/detail?planId=${item.planDetailVos[0].planId}&elevatorId=${item.planDetailVos[0].elevatorId}&overdueName=${overdueName}&planCheckName=${planCheckName}`,
					});
				}
				break;
			case 2:
				if (item.planCounts) {
					uni.navigateTo({
						url: `/subpages/repair/repariDetail?planId=${item.planDetailVos[0].planId}&elevatorId=${item.planDetailVos[0].elevatorId}`,
					});
				}
				break;
			case 3:
				if (item.planCounts) {
					if (item.planCounts > 1) {
						// eslint-disable-next-line vue/custom-event-name-casing
						uni.$emit('switchTab', 1, true);
					} else {
						uni.navigateTo({
							url: `/subpages/rescue/rescueDetail?planId=${item.planDetailVos[0].planId
							}&elevatorId=${item.planDetailVos[0].elevatorId > 0
								? item.planDetailVos[0].elevatorId
								: ''
							}`,
						});
					}
				}
				break;
			case 4:
				if (item.planCounts) {
					uni.navigateTo({
						url: `/subpages/workOrders/partOrder?planId=${item.planDetailVos[0].planId}&elevatorId=${item.planDetailVos[0].elevatorId}`,
					});
				}
				break;

			case 5:
				if (item.planCounts) {
					uni.navigateTo({
						url: `/subpages/repair/affair/affairDetail?planId=${item.planDetailVos[0].planId}&elevatorId=${item.planDetailVos[0].elevatorId}`,
					});
				}
				break;
			case 6:
				if (item.planCounts) {
					uni.navigateTo({
						url: `/subpages/quality/qualityDetail?planId=${item.planDetailVos[0].planId}&elevatorId=${item.planDetailVos[0].elevatorId}`,
					});
				}
				break;
			case 9:
				if (item.planCounts) {
					uni.navigateTo({
						url: `/subpages/correction/detail?planId=${item.planDetailVos[0].planId}&elevatorId=${item.planDetailVos[0].elevatorId}`,
					});
				}
				break;
			}
		},
		async toSecondary(params = {}) {
			let isTabbar = this.typeMap[this.type].isTabbar || false;
			let url = this.typeMap[this.type].url;
			if (isTabbar) {
				console.log('tabbar页面', url);
				// uni.switchTab({
				// 	url:url,
				// 	complete:(e)=> {
				// 		console.log(e)
				// 	},
				// 	fail:(err)=>{
				// 		console.log(err);
				// 	}
				// })
			} else {
				if (this.type == 1) {
					// 如果是考勤
					let ymd = formatTime(new Date().getTime(), '-', true)
						.split(' ')[0]
						.replace(/\-/g, '');
					let month = formatTime(new Date().getTime(), '-', true).split('-')[1];
					var result = month;
					if (Number(month) < 10) {
						result = month.replace('0', '');
					}
					let str =
						'/pageModules/signPage/siginIndex?month=' + result + '&ymd=' + ymd;
					uni.navigateTo({
						url: str,
					});
				} else if (this.type == 5 || this.type == 6) {
					uni.showLoading({
						title: '请稍候',
					});
					// 维修统计需要的所有的组id
					await this.getGroupList();
					uni.hideLoading();
					// 维保员 没有数据切换权限
					if (!this.findRoute('data_change')) {
						uni.setStorage({
							key: 'statistical',
							data: {
								id: this.userinfo.user_id,
								title: this.userinfo.nick_name,
								groupId: this.userinfo.dept_id,
							},
							success: () => {
								uni.navigateTo({
									url: '/subpages/statistics/statistical',
								});
							},
						});
					} else {
						// 组长
						this.getGroupMbs();
					}
				} else if (this.type == 2) {
					// 如果是我的任务
					console.log('这里是维修任务');
					// return
					// eslint-disable-next-line vue/custom-event-name-casing
					this.$emit('changeTab', 1);
				} else {
					// params 组成 ?xxx=xxx&xxx=xxx
					let paramsStr = '';
					for (let key in params) {
						paramsStr += `${key}=${params[key]}&`;
					}
					if (paramsStr) {
						paramsStr = paramsStr.slice(0, -1);
					}
					uni.navigateTo({
						url: `${url}?${paramsStr}`,
					});
				}
			}
		},
		// 获取组及人员列表
		getGroupMbs() {
			uni.showLoading({
				title: '加载中',
				mask: true,
			});
			getMembers().then((res) => {
				let msb;
				if (res.data.length) {
					msb = res.data[0];
				} else {
					uni.hideLoading();
					uni.showModal({
						title: '提示',
						content: '暂无下属成员',
						showCancel: false,
					});
					return;
				}
				let mbs = this.getMemberIds(msb.children, []);
				mbs = delRepeat(mbs);
				// 第一级组列表
				let groups = this.getGroups(msb.children, msb.id);
				for (let i = 0; i < groups.length; i++) {
					groups[i].children = delRepeat(groups[i].children, 'id');
				}
				console.log('msb', groups);
				// 组维度 查找全部人员id
				let obj = {
					id: mbs.join(','),
					groupList: groups,
					title: msb.title,
					groupId: msb.id,
				};
				uni.setStorage({
					key: 'statistical',
					data: obj,
					success: () => {
						uni.hideLoading();
						uni.navigateTo({
							url: '/subpages/statistics/statistical',
						});
					},
				});
			});
		},
		// 获取第一级组列表
		getGroups(list, groupId) {
			let arr = [];
			let other = {
				id: groupId,
				type: 1,
				name: '未分组',
				children: [],
			};
			for (let i = 0; i < list.length; i++) {
				if (list[i].type == 1) {
					arr.push({
						id: list[i].id,
						name: list[i].title,
						type: 1,
						children: this.getMemberList(list[i].children || [], []),
					});
				} else {
					other.children.push({
						id: list[i].id,
						name: list[i].title,
						type: 2,
					});
				}
			}
			if (other.children.length) {
				arr.push(other);
			}
			return arr;
		},
		getMemberList(nodes, arr) {
			if (nodes && nodes.length) {
				for (let i = 0; i < nodes.length;) {
					if (nodes[i].type == 2) {
						arr.push({
							id: nodes[i].id,
							name: nodes[i].title,
							type: 2,
						});
					} else {
						if (nodes[i].children && nodes[i].children.length > 0) {
							arr = arr.concat(this.getMemberList(nodes[i].children, []));
						}
					}
					i++;
				}
			}

			return arr;
		},

		// 递归获取组下所有用户id
		getMemberIds(nodes, arr) {
			if (nodes && nodes.length) {
				for (let i = 0; i < nodes.length;) {
					if (nodes[i].type == 2) {
						arr.push(nodes[i].id);
					} else {
						if (nodes[i].children && nodes[i].children.length > 0) {
							arr = arr.concat(this.getMemberIds(nodes[i].children, []));
						}
					}
					i++;
				}
			}

			return arr;
		},
		getGroupList() {
			return new Promise((reslove) => {
				getRepairGroups({}).then((res) => {
					console.log(res);
					this.groupList = res.data;
					const allIds = this.getAllIds(this.groupList);
					// return
					uni.setStorage({
						key: 'repairStatistical',
						data: {
							id: allIds.ids,
							title: allIds.titles,
							isFirst: true,
							allGroupIds: allIds.ids,
							allGroupTitles: allIds.titles,
						},
						success: () => {
							reslove();
						},
					});
				});
			});
		},
		// 递归组件
		getAllIds(tree) {
			const ids = [];
			const titles = [];
			function traverse(node) {
				if (node.length) {
					node.forEach((item) => {
						ids.push(item.id);
						titles.push(item.title);
						if (item.children) {
							item.children.forEach((child) => {
								// 递归处理子节点
								traverse(child);
							});
						}
					});
				} else {
					ids.push(node.id);
					titles.push(node.title);
					if (node.children) {
						node.children.forEach((child) => {
							// 递归处理子节点
							traverse(child);
						});
					}
				}
			}
			// 从根节点开始遍历
			traverse(tree);
			return { ids, titles };
		},

		resFunc(status) {
			let str = '';
			if (status) {
				let item = this.workList.find((item) => item.id === status) || {};
				str = item.name;
			}
			return str;
		},
		// 跳转到个人工单页
		toRecords(type) {
			let urlQuery = '';
			switch (type) {
			case 1:
				urlQuery = `&statusStr=${[
					1, 2, 3,
				].join()}&overdueTypeStr=2&auditTypeStr=2`;
				break;
			case 2:
				urlQuery = `&statusStr=${[
					1, 2, 3,
				].join()}&overdueTypeStr=3&auditTypeStr=2`;
				break;
			case 3:
				urlQuery = '&statusStr=3&auditTypeStr=2&userSignatureType=1';
				break;
			case 4:
				urlQuery = '&statusStr=3&auditTypeStr=2&userSignatureType=2';
				break;
			}
			uni.navigateTo({
				url: `/subpages/workOrders/records?type=2&tabIndex=0${urlQuery}`,
			});
		},
	},
};
</script>
<style lang="scss" scoped>
.cardItem {
	background-color: #fff;
	border-radius: 8rpx;
	margin: 16rpx 0;

	.header {
		display: flex;
		justify-content: space-between;
		padding: 18rpx 32rpx 16rpx 32rpx;
		align-items: center;
		border-bottom: 2rpx solid #eeeeee;
		position: relative;

		.header_left {
			font-size: 32rpx;
			color: #333;
			font-weight: 600;
			display: flex;

			image {
				margin-right: 12rpx;
				width: 48rpx;
				height: 48rpx;
			}

			.title {
				text {
					color: #999;
					font-size: 28rpx;
					font-weight: normal;
				}
			}
		}

		.line {
			width: 4rpx;
			height: 28rpx;
			background-color: #0091ff;
			position: absolute;
			left: 0;
			top: 30rpx;
		}
	}

	.main {
		.main_tab {
			display: flex;
			justify-content: space-around;

			.tabItem {
				width: 100%;
				text-align: left;
				padding-left: 30rpx;
			}

			.amount {
				font-size: 36rpx;
				color: #0091ff;
				font-weight: bold;
			}

			.words {
				color: #666666;
				font-size: 24rpx;
				padding: 10rpx 0;
				display: flex;
			}

			.borderRight {
				border-right: 1px solid #eee;
			}
		}

		.main_item {
			padding: 32rpx 32rpx 22rpx 0rpx;
			position: relative;

			.title {
				// border-left: 4rpx solid #0091ff;
				padding-left: 28rpx;
				margin-bottom: 16rpx;
				font-size: 28rpx;
				font-weight: 600;
				color: #333;
			}
		}

		.noPadding {
			padding-top: 0;
		}

		.subMain {
			// padding-left: 32rpx;
			display: flex;

			.siginBox {
				width: 100%;
				display: flex;
				// border-bottom: 2rpx solid #eeeeee;
				padding-bottom: 22rpx;
			}

			.subMain_item {
				.signStatus {
					display: flex;
					align-items: center;
					margin-bottom: 4rpx;

					image {
						width: 28rpx;
						height: 28rpx;
						margin-right: 8rpx;
						// margin-top: 4rpx;
					}
				}

				display: flex;
				flex: 1;
				// align-items: center;
				padding-left: 32rpx;
				flex-direction: column;
				border-right: 2rpx solid #eeeeee;

				.count {
					color: #333;
					font-size: 32rpx;
					font-weight: 600;
				}

				.bottom {
					font-size: 24rpx;
					color: #666;
				}

				&:nth-last-child(1) {
					border-right: none;
				}
			}
		}
	}
}

.color_FF7505 {
	color: #ff7505 !important;
}

.color_red {
	color: #e02020 !important;
}

.text_desc {
	font-size: 24rpx;
	font-weight: normal;
	line-height: normal;
	letter-spacing: normal;
	color: #666666;
}

.projectTitle {
	display: flex;
	align-items: center;
}

.msg {
	width: 30rpx;
	height: 30rpx;
	margin-left: 8rpx;
	padding-top: 12rpx;
}

.tipsContent {
	width: 550rpx;
	text-align: left;
	white-space: pre-line;
	word-break: break-all;
}
</style>
